﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed?

#pragma once
#include "GcmpRenderingInterface.h"
#include "Color.h"
#include "Vector3d.h"
#include <string>
#include "GcmpApiDeclaration.h"
#include "IShadowOptions.h"

namespace gcmp
{


    /// \brief 天空和阴影选项设置
    ///假设天空类型一旦设置了就不会再改变
    ///如果改变天空类型，之前设置的属性全部无效 
    class GCMP_DEPRECATED_CLASS(2020/08/01) GCMP_RENDERING_INTERFACE_EXPORT ISkyOptionsDeprecated
    {
    public:
        /// \brief 析构函数
        ///
        GCMP_DEPRECATED_API(2020/08/01) virtual ~ISkyOptionsDeprecated() {}

        ///\brief 打开阴影功能
        ///
        ///\param[in] bEnable 为true，打开阴影功能；否则关闭阴影功能
        /// \return
        ///设置完成后需要调用UiView的MarkNeedRebuild和Refresh函数刷新视图
        ///否则阴影效果无效
        ///如 gcmp::IUiView* m_uiView
        ///m_uiView->MarkNeedRebuild(true);
        ///m_uiView->Refresh();
        GCMP_DEPRECATED_API(2020/08/01) virtual void EnableShadow(bool bEnable) = 0;

        ///\brief 获取阴影的状态
        ///
        ///\return true,阴影功能已打开；false，阴影功能已关闭
        GCMP_DEPRECATED_API(2020/08/01) virtual bool IsShadowEnabled() const= 0;

        ///\brief 设置天空类型为大气散射
        ///
        GCMP_DEPRECATED_API(2020/08/01) virtual void SetSkyAtmosphere() = 0;

        ///\brief 设置天空类型为天空球
        ///
        ///\param[in] resDir 天空球纹理和顶点数据目录
        /// \return
        GCMP_DEPRECATED_API(2020/08/01) virtual void SetSkySphere(const std::wstring& resDir) = 0;

        /// \brief 设置地面的颜色
        /// \param[in] groundColor 地面的颜色，只支持设置RGB，透明度无效
        /// \return true,设置成功；false,设置失败
        /// \如果当前天空类型不支持该接口或者当前为软件模拟状态，则报警告
        GCMP_DEPRECATED_API(2020/08/01) virtual bool SetGroundColor(const Color& groundColor) = 0;

        ///\brief 获取地面的颜色
        ///
        ///\param[out] groundColor 地面颜色,只支持RGB，透明度为255
        ///\return 
        ///如果当前天空类型不支持该接口，则返回Color::Black
        GCMP_DEPRECATED_API(2020/08/01) virtual void GetGroundColor(Color& groundColor) const= 0;

        ///\brief 设置地面的纹理
        ///
        ///\param[in] filePath 纹理文件的全路径
        /// \return
        GCMP_DEPRECATED_API(2020/08/01) virtual void SetGroundTexture(const std::wstring& filePath) = 0;

        ///\brief 获取地面纹理文件的路径
        ///
        ///\return 返回地面纹理文件的路径
        GCMP_DEPRECATED_API(2020/08/01) virtual std::wstring GetGroundTexture() const= 0;

        //设置光照
        ///\brief 设置太阳方位角，弧度[0, M_2PI]
        ///
        ///\param[in] horizontalAngle 方位角的弧度
        /// \return
        GCMP_DEPRECATED_API(2020/08/01) virtual void SetSunHorizontalAngle(float horizontalAngle) = 0;

        ///\brief 获取太阳方位角
        ///
        ///\return 返回方位角的弧度
        GCMP_DEPRECATED_API(2020/08/01) virtual float GetSunHorizontalAngle() const= 0;

        ///\brief 设置太阳的高度角，弧度[0, M_PI/2]
        ///
        ///\param[in] verticalAngle 太阳的高度角，弧度
        /// \return
        GCMP_DEPRECATED_API(2020/08/01) virtual void SetSunVerticalAngle(float verticalAngle) = 0;

        ///\brief 获取太阳的高度角
        ///
        ///\return 返回太阳的高度角，弧度
        GCMP_DEPRECATED_API(2020/08/01) virtual float GetSunVerticalAngle() const= 0;

        ///\brief 设置太阳的位置
        ///
        ///\param[in] pos 太阳的位置
        /// \return
        ///光照类型为LightType::Directional时，设置位置无效
        GCMP_DEPRECATED_API(2020/08/01) virtual void SetSunPosition(const Vector3d& pos) = 0;

        ///\brief 获取太阳的位置
        ///
        ///\return 返回太阳的位置
        GCMP_DEPRECATED_API(2020/08/01) virtual Vector3d GetSunPosition() const= 0;

        ///\brief 设置光照类型
        ///
        ///\param[in] type 光照类型
        /// \return
        GCMP_DEPRECATED_API(2020/08/01) virtual void SetLightType(LightType type) = 0;

        ///\brief 获取光照类型
        ///
        ///\return 返回光照类型
        GCMP_DEPRECATED_API(2020/08/01) virtual LightType GetLightType() const= 0;
    };
}

